package com.suning.sawp.intf.storeman;

import java.io.InputStream;
import java.util.List;

import com.suning.nsfuaa.employee.dto.EmployeeInfo;
import com.suning.sawp.dto.bi.BiStoreKeeperSaleDataDto;
import com.suning.sawp.dto.common.ReturnMsg;
import com.suning.sawp.dto.mainpush.LastestChooseManReqDto;
import com.suning.sawp.dto.mainpush.RankingListDto;
import com.suning.sawp.dto.mainpush.SaleStatisticDto;
import com.suning.sawp.dto.mainpush.StoreCateSaleStatis;
import com.suning.sawp.dto.mainpush.StoreManDto;
import com.suning.sawp.dto.mainpush.StoreMonSaleDetailDto;
import com.suning.sawp.dto.mainpush.StoreTaskCompleteDto;
import com.suning.sawp.dto.storeman.StoreLoginResultBean;
import com.suning.sawp.dto.storeman.StoreManIndexShowData;
import com.suning.sawp.exception.MobileException;
import com.suning.sawp.service.task.dto.BIStoreTask;
import com.suning.vgs.follow.remote.store.ActiveIndicator;
import com.suning.vgs.follow.remote.store.ShopGuideDto;
import com.suning.vgs.follow.remote.store.UpdateHeadPicRetDto;

/**
 * 
 * 店员相关服务<br>
 * 〈功能详细描述〉
 *
 * @author 12061818
 * @see [相关类/方法]（可选）
 * @since [产品/模块版本] （可选）
 */
public interface StoreManService {
	/**
	 * 
	 * 功能描述: 登录时，返回店员用户信息<br>
	 * 〈功能详细描述〉
	 *
	 * @param staffId
	 * @param deviceName
	 * @param djDeviceId
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	StoreLoginResultBean staffLogin(String staffId, String requestIp, String deviceName, String djDeviceId) throws MobileException;

	/**
	 * 
	 * 功能描述: 获取云导购店员用户活跃度指标<br>
	 * 〈功能详细描述〉 （今日被赞数，总计被赞数，今日被咨询数）
	 * 
	 * @param staffId
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	ReturnMsg<ActiveIndicator> getActiveIndicator(String staffId);

	/**
	 * 
	 * 功能描述: 获取所有商品品类信息<br>
	 * 〈功能详细描述〉
	 *
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	ReturnMsg<List<ShopGuideDto>> getAllProductCategories();

	/**
	 * 
	 * 功能描述: 更新云导购店员用户属性<br>
	 * 〈功能详细描述〉
	 *
	 * @param staffId
	 * @param productCatagories
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	ReturnMsg<String> updateUserInfo(String staffId, String productCatagories);

	/**
	 * 
	 * 功能描述: 上传店员头像<br>
	 * 〈功能详细描述〉
	 *
	 * @param userId
	 * @param inputStream
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	ReturnMsg<UpdateHeadPicRetDto> uploadHeadPic(String staffId, InputStream inputStream);

	/**
	 * 
	 * 功能描述: 增加店员附属信息至redis缓存中<br>
	 * 〈功能详细描述〉 附属信息包括：门店-品类-岗位
	 * 
	 * @param attachInfo
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	void addStoreManAttachInfo2Cache(StoreManDto attachInfo);

	/**
	 * 
	 * 功能描述: 移除店员附属信息<br>
	 * 〈功能详细描述〉
	 *
	 * @param staffId
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	void removeStoreManAttachInfoCache(String staffId);

	/**
	 * 
	 * 功能描述: 查询店员附属信息<br>
	 * 〈功能详细描述〉 附属信息包括：门店-品类-岗位
	 * 
	 * @param staffId
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	StoreManDto queryStoreManAttachInfo(String staffId);

	/**
	 * 
	 * 功能描述: 查询店+首页展示数据<br>
	 * 〈功能详细描述〉
	 *
	 * @param staffId
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	StoreManIndexShowData getStoreManIndexShowData(String staffId);

	/**
	 * 
	 * 功能描述: 店+首页展示数据-增加门店实时销售<br>
	 * 〈功能详细描述〉
	 *
	 * @param staffId
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	StoreManIndexShowData getStoreManIndexShowDataNew(String staffId);

	/**
	 * 
	 * 功能描述: 移除redis中店员首页数据<br>
	 * 〈功能详细描述〉
	 *
	 * @param staffId
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	void removeIndexShowDataCache(String staffId);

	/**
	 * 
	 * 功能描述: 查询排行榜数据<br>
	 * 〈功能详细描述〉
	 *
	 * @param staffId
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	List<RankingListDto> getHeroListData(String staffId, String categoryCode);

	/**
	 * 
	 * 功能描述: 查询门店销售额统计<br>
	 * 〈功能详细描述〉
	 *
	 * @param staffId
	 * @param categoryCode
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	List<SaleStatisticDto> getSaleStatistic(String staffId);

	/**
	 * 
	 * 功能描述: 查询门店品类销售情况<br>
	 * 〈功能详细描述〉 （当月+今日）
	 * 
	 * @param staffId
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	List<StoreCateSaleStatis> getStoreCateSalestatis(String staffId, String categoryCode, int sort, String sortType, int startIndex, int limit);

	/**
	 * 
	 * 功能描述: 保存最近选择人<br>
	 * 〈功能详细描述〉
	 *
	 * @param chooseManReqDto
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	void saveLastestChooseMan(String staffId, LastestChooseManReqDto chooseManReqDto);

	/**
	 * 
	 * 功能描述: 查看主推排行榜<br>
	 * 〈功能详细描述〉
	 *
	 * @param staffId
	 * @param taskNo
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	List<RankingListDto> getMainPushRankingList(String staffId, Long taskNo);

	/**
	 * 
	 * 功能描述: 查询门店主推任务的详情<br>
	 * 〈功能详细描述〉
	 *
	 * @param categoryCode
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	BIStoreTask getStoreMainPushDetail(String staffId, Long taskNo, String categoryCode);

	/**
	 * 
	 * 功能描述: 门店主推任务的完成明细<br>
	 * 〈功能详细描述〉
	 *
	 * @param storeTaskNo
	 * @param saleDate
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	StoreTaskCompleteDto getStoreTaskCompleteDetail(String staffId, Long storeTaskNo, String uniCode, String saleDate, String queryType);

	/**
	 * 
	 * 功能描述: 门店岗位编码查询店员<br>
	 * 〈功能详细描述〉 00010001-营业员 00010002-促销员
	 * 
	 * @param staffId
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	List<EmployeeInfo> getClerksInStore(String staffId);

	/**
	 * 
	 * 功能描述: 门店岗位编码查询店员<br>
	 * 
	 * @param staffId
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	List<EmployeeInfo> getClerksInStoreEx(String staffId, String positionIds);

	/**
	 * 
	 * 功能描述: 根据门店编码和岗位编码查询门店对应角色的店员<br>
	 * 〈功能详细描述〉
	 *
	 * @param storeCode
	 * @param positionIds
	 *            多个“,”隔开
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	List<EmployeeInfo> getClerksInStoretiByStoreCd(String storeCode, String positionIds);

	/**
	 * 
	 * 功能描述: 根据门店编码和岗位编码,品类编码 查询对应角色的店员<br>
	 * (目前查督导用)
	 * 
	 * @param storeCode
	 * @param positionId
	 *            岗位id
	 * @param cateCode
	 *            品类编码
	 * @return
	 */
	public List<EmployeeInfo> getClerksInStoreByStoreCodeAndCateCode(String storeCode, String positionId, String cateCode);

	/**
	 * 
	 * 功能描述: 获取最近选择人列表<br>
	 * 〈功能详细描述〉
	 *
	 * @param staffId
	 * @param categoryCode
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	List<EmployeeInfo> getLastestChooseMans(String staffId, String categoryCode);

	/**
	 * 
	 * 功能描述: 查询店长对应门店月度销售详情，包括目标任务完成率、毛利等<br>
	 * 〈功能详细描述〉
	 *
	 * @param staffId
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	ReturnMsg<List<StoreMonSaleDetailDto>> getStoreMonSales(String staffId);

	/**
	 * 
	 * 功能描述: 为店长角色的wap页提供销售数据<br>
	 * 〈功能详细描述〉
	 *
	 * @param staffId
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	ReturnMsg<BiStoreKeeperSaleDataDto> getStoreKeeperWapSaleData(String staffId);

	/**
	 * 更新店员的岗位信息 功能描述: <br>
	 * 〈功能详细描述〉
	 *
	 * @param positionName
	 * @param positionId
	 * @param name
	 * @param string
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	ReturnMsg<String> updatePositionInfo(String roleType, String orgId, String positionName, String positionId, String name);

}
